A Natureza da Homoiconicidade
Linguagem homoiconica: Uma linguagem em que a representação interna é expressa na própria linguagem. No Elixir, o código-fonte não é apenas texto; é uma estrutura de dados aninhada conhecida como a Árvore Abstrata de Sintaxe (AST).
1. Regras Lógicas de Representação
O Elixir simplifica a AST representando literais básicos por si mesmos. Átomos, números, listas (incluindo listas de palavras-chave), binários e tuplas com dois elementos são representados internamente sem envoltórios complexos.
[do: 1]
iex> quote do: "binários"
"binários"
2. Estrutura da Tupla AST
A maioria das transformações de código resulta em uma tupla de três elementos: {nome_função, metadados, argumentos}. Por exemplo, uma chamada de função como 1 + 2 torna-se {:+, [linha: 1], [1, 2]}. Isso permite que a linguagem trate Código como Dados.
3. Macros: Adiando Execução
Macros são "uma forma de adiar a execução de cláusulas injetando código de volta na representação interna do nosso programa." Enquanto funções padrão avaliam os argumentos antes chamadas, os macros recebem a AST bruto, permitindo a injeção de lógica antes da compilação.
$$\text{Código Fonte} \xrightarrow{\text{Quote}} \text{Tupla AST} \xrightarrow{\text{Macro}} \text{AST Transformado}$$